package com.flower.service.impl;

import com.flower.dao.FlowerRepository;
import com.flower.pojo.Flower;
import com.flower.service.FlowerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;

@Service
public class FlowerServiceImpl implements FlowerService {

    private final FlowerRepository flowerRepository;
    
    // 库存阈值，低于此值视为库存不足
    private static final int STOCK_THRESHOLD = 30;

    @Autowired
    public FlowerServiceImpl(FlowerRepository flowerRepository) {
        this.flowerRepository = flowerRepository;
    }

    @Override
    public List<Flower> getAllFlowers() {
        return flowerRepository.findAll();
    }

    @Override
    public Optional<Flower> getFlowerById(Long id) {
        return flowerRepository.findById(id);
    }

    @Override
    public Flower saveFlower(Flower flower) {
        return flowerRepository.save(flower);
    }

    @Override
    public void deleteFlower(Long id) {
        flowerRepository.deleteById(id);
    }
    
    @Override
    public List<Flower> searchFlowers(String keyword, String category, String priceRange, String stock) {
        // 如果没有任何搜索条件，返回所有花卉
        if (!StringUtils.hasText(keyword) && !StringUtils.hasText(category) && 
            !StringUtils.hasText(priceRange) && !StringUtils.hasText(stock)) {
            return getAllFlowers();
        }
        
        // 解析价格范围
        BigDecimal minPrice = null;
        BigDecimal maxPrice = null;
        boolean isPriceGreaterThanEqual = false;
        
        if (StringUtils.hasText(priceRange)) {
            if (priceRange.endsWith("+")) {
                // 处理 "200+" 格式
                String minPriceStr = priceRange.substring(0, priceRange.length() - 1);
                minPrice = new BigDecimal(minPriceStr);
                isPriceGreaterThanEqual = true;
            } else if (priceRange.contains("-")) {
                // 处理 "50-100" 格式
                String[] prices = priceRange.split("-");
                minPrice = new BigDecimal(prices[0]);
                maxPrice = new BigDecimal(prices[1]);
            }
        }
        
        // 根据不同的条件组合调用不同的查询方法
        boolean hasKeyword = StringUtils.hasText(keyword);
        boolean hasCategory = StringUtils.hasText(category);
        boolean hasPriceRange = minPrice != null && maxPrice != null;
        boolean hasPriceGreaterThanEqual = minPrice != null && isPriceGreaterThanEqual;
        boolean hasLowStock = "low".equals(stock);
        boolean hasNormalStock = "normal".equals(stock);
        
        // 1. 只有关键字
        if (hasKeyword && !hasCategory && !hasPriceRange && !hasPriceGreaterThanEqual && !hasLowStock && !hasNormalStock) {
            return flowerRepository.findByKeyword(keyword);
        }
        
        // 2. 只有类别
        if (!hasKeyword && hasCategory && !hasPriceRange && !hasPriceGreaterThanEqual && !hasLowStock && !hasNormalStock) {
            return flowerRepository.findByCategory(category);
        }
        
        // 3. 只有价格范围
        if (!hasKeyword && !hasCategory && hasPriceRange && !hasLowStock && !hasNormalStock) {
            return flowerRepository.findByPriceBetween(minPrice, maxPrice);
        }
        
        // 4. 只有价格大于等于
        if (!hasKeyword && !hasCategory && !hasPriceRange && hasPriceGreaterThanEqual && !hasLowStock && !hasNormalStock) {
            return flowerRepository.findByPriceGreaterThanEqual(minPrice);
        }
        
        // 5. 只有库存状态（低库存）
        if (!hasKeyword && !hasCategory && !hasPriceRange && !hasPriceGreaterThanEqual && hasLowStock) {
            return flowerRepository.findByStockQuantityLessThan(STOCK_THRESHOLD);
        }
        
        // 6. 只有库存状态（正常库存）
        if (!hasKeyword && !hasCategory && !hasPriceRange && !hasPriceGreaterThanEqual && hasNormalStock) {
            return flowerRepository.findByStockQuantityGreaterThanEqual(STOCK_THRESHOLD);
        }
        
        // 7. 关键字 + 类别
        if (hasKeyword && hasCategory && !hasPriceRange && !hasPriceGreaterThanEqual && !hasLowStock && !hasNormalStock) {
            return flowerRepository.findByKeywordAndCategory(keyword, category);
        }
        
        // 8. 关键字 + 价格范围
        if (hasKeyword && !hasCategory && hasPriceRange && !hasLowStock && !hasNormalStock) {
            return flowerRepository.findByKeywordAndPriceBetween(keyword, minPrice, maxPrice);
        }
        
        // 9. 关键字 + 价格大于等于
        if (hasKeyword && !hasCategory && !hasPriceRange && hasPriceGreaterThanEqual && !hasLowStock && !hasNormalStock) {
            return flowerRepository.findByKeywordAndPriceGreaterThanEqual(keyword, minPrice);
        }
        
        // 10. 关键字 + 库存状态（低库存）
        if (hasKeyword && !hasCategory && !hasPriceRange && !hasPriceGreaterThanEqual && hasLowStock) {
            return flowerRepository.findByKeywordAndLowStock(keyword, STOCK_THRESHOLD);
        }
        
        // 11. 关键字 + 库存状态（正常库存）
        if (hasKeyword && !hasCategory && !hasPriceRange && !hasPriceGreaterThanEqual && hasNormalStock) {
            return flowerRepository.findByKeywordAndNormalStock(keyword, STOCK_THRESHOLD);
        }
        
        // 12. 类别 + 价格范围
        if (!hasKeyword && hasCategory && hasPriceRange && !hasLowStock && !hasNormalStock) {
            return flowerRepository.findByCategoryAndPriceBetween(category, minPrice, maxPrice);
        }
        
        // 13. 类别 + 价格大于等于
        if (!hasKeyword && hasCategory && !hasPriceRange && hasPriceGreaterThanEqual && !hasLowStock && !hasNormalStock) {
            return flowerRepository.findByCategoryAndPriceGreaterThanEqual(category, minPrice);
        }
        
        // 14. 类别 + 库存状态（低库存）
        if (!hasKeyword && hasCategory && !hasPriceRange && !hasPriceGreaterThanEqual && hasLowStock) {
            return flowerRepository.findByCategoryAndLowStock(category, STOCK_THRESHOLD);
        }
        
        // 15. 类别 + 库存状态（正常库存）
        if (!hasKeyword && hasCategory && !hasPriceRange && !hasPriceGreaterThanEqual && hasNormalStock) {
            return flowerRepository.findByCategoryAndNormalStock(category, STOCK_THRESHOLD);
        }
        
        // 16. 价格范围 + 库存状态（低库存）
        if (!hasKeyword && !hasCategory && hasPriceRange && hasLowStock) {
            return flowerRepository.findByPriceBetweenAndLowStock(minPrice, maxPrice, STOCK_THRESHOLD);
        }
        
        // 17. 价格范围 + 库存状态（正常库存）
        if (!hasKeyword && !hasCategory && hasPriceRange && hasNormalStock) {
            return flowerRepository.findByPriceBetweenAndNormalStock(minPrice, maxPrice, STOCK_THRESHOLD);
        }
        
        // 18. 价格大于等于 + 库存状态（低库存）
        if (!hasKeyword && !hasCategory && !hasPriceRange && hasPriceGreaterThanEqual && hasLowStock) {
            return flowerRepository.findByPriceGreaterThanEqualAndLowStock(minPrice, STOCK_THRESHOLD);
        }
        
        // 19. 价格大于等于 + 库存状态（正常库存）
        if (!hasKeyword && !hasCategory && !hasPriceRange && hasPriceGreaterThanEqual && hasNormalStock) {
            return flowerRepository.findByPriceGreaterThanEqualAndNormalStock(minPrice, STOCK_THRESHOLD);
        }
        
        // 20. 关键字 + 类别 + 价格范围
        if (hasKeyword && hasCategory && hasPriceRange && !hasLowStock && !hasNormalStock) {
            return flowerRepository.findByKeywordAndCategoryAndPriceBetween(keyword, category, minPrice, maxPrice);
        }
        
        // 21. 关键字 + 类别 + 价格大于等于
        if (hasKeyword && hasCategory && !hasPriceRange && hasPriceGreaterThanEqual && !hasLowStock && !hasNormalStock) {
            return flowerRepository.findByKeywordAndCategoryAndPriceGreaterThanEqual(keyword, category, minPrice);
        }
        
        // 22. 关键字 + 类别 + 库存状态（低库存）
        if (hasKeyword && hasCategory && !hasPriceRange && !hasPriceGreaterThanEqual && hasLowStock) {
            return flowerRepository.findByKeywordAndCategoryAndLowStock(keyword, category, STOCK_THRESHOLD);
        }
        
        // 23. 关键字 + 类别 + 库存状态（正常库存）
        if (hasKeyword && hasCategory && !hasPriceRange && !hasPriceGreaterThanEqual && hasNormalStock) {
            return flowerRepository.findByKeywordAndCategoryAndNormalStock(keyword, category, STOCK_THRESHOLD);
        }
        
        // 24. 关键字 + 价格范围 + 库存状态（低库存）
        if (hasKeyword && !hasCategory && hasPriceRange && hasLowStock) {
            return flowerRepository.findByKeywordAndPriceBetweenAndLowStock(keyword, minPrice, maxPrice, STOCK_THRESHOLD);
        }
        
        // 25. 关键字 + 价格范围 + 库存状态（正常库存）
        if (hasKeyword && !hasCategory && hasPriceRange && hasNormalStock) {
            return flowerRepository.findByKeywordAndPriceBetweenAndNormalStock(keyword, minPrice, maxPrice, STOCK_THRESHOLD);
        }
        
        // 26. 关键字 + 价格大于等于 + 库存状态（低库存）
        if (hasKeyword && !hasCategory && !hasPriceRange && hasPriceGreaterThanEqual && hasLowStock) {
            return flowerRepository.findByKeywordAndPriceGreaterThanEqualAndLowStock(keyword, minPrice, STOCK_THRESHOLD);
        }
        
        // 27. 关键字 + 价格大于等于 + 库存状态（正常库存）
        if (hasKeyword && !hasCategory && !hasPriceRange && hasPriceGreaterThanEqual && hasNormalStock) {
            return flowerRepository.findByKeywordAndPriceGreaterThanEqualAndNormalStock(keyword, minPrice, STOCK_THRESHOLD);
        }
        
        // 28. 类别 + 价格范围 + 库存状态（低库存）
        if (!hasKeyword && hasCategory && hasPriceRange && hasLowStock) {
            return flowerRepository.findByCategoryAndPriceBetweenAndLowStock(category, minPrice, maxPrice, STOCK_THRESHOLD);
        }
        
        // 29. 类别 + 价格范围 + 库存状态（正常库存）
        if (!hasKeyword && hasCategory && hasPriceRange && hasNormalStock) {
            return flowerRepository.findByCategoryAndPriceBetweenAndNormalStock(category, minPrice, maxPrice, STOCK_THRESHOLD);
        }
        
        // 30. 类别 + 价格大于等于 + 库存状态（低库存）
        if (!hasKeyword && hasCategory && !hasPriceRange && hasPriceGreaterThanEqual && hasLowStock) {
            return flowerRepository.findByCategoryAndPriceGreaterThanEqualAndLowStock(category, minPrice, STOCK_THRESHOLD);
        }
        
        // 31. 类别 + 价格大于等于 + 库存状态（正常库存）
        if (!hasKeyword && hasCategory && !hasPriceRange && hasPriceGreaterThanEqual && hasNormalStock) {
            return flowerRepository.findByCategoryAndPriceGreaterThanEqualAndNormalStock(category, minPrice, STOCK_THRESHOLD);
        }
        
        // 32. 关键字 + 类别 + 价格范围 + 库存状态（低库存）
        if (hasKeyword && hasCategory && hasPriceRange && hasLowStock) {
            return flowerRepository.findByKeywordAndCategoryAndPriceBetweenAndLowStock(keyword, category, minPrice, maxPrice, STOCK_THRESHOLD);
        }
        
        // 33. 关键字 + 类别 + 价格范围 + 库存状态（正常库存）
        if (hasKeyword && hasCategory && hasPriceRange && hasNormalStock) {
            return flowerRepository.findByKeywordAndCategoryAndPriceBetweenAndNormalStock(keyword, category, minPrice, maxPrice, STOCK_THRESHOLD);
        }
        
        // 34. 关键字 + 类别 + 价格大于等于 + 库存状态（低库存）
        if (hasKeyword && hasCategory && !hasPriceRange && hasPriceGreaterThanEqual && hasLowStock) {
            return flowerRepository.findByKeywordAndCategoryAndPriceGreaterThanEqualAndLowStock(keyword, category, minPrice, STOCK_THRESHOLD);
        }
        
        // 35. 关键字 + 类别 + 价格大于等于 + 库存状态（正常库存）
        if (hasKeyword && hasCategory && !hasPriceRange && hasPriceGreaterThanEqual && hasNormalStock) {
            return flowerRepository.findByKeywordAndCategoryAndPriceGreaterThanEqualAndNormalStock(keyword, category, minPrice, STOCK_THRESHOLD);
        }
        
        // 默认返回所有花卉
        return getAllFlowers();
    }
} 